package br.com.statizo.financeiro.view;

import java.util.List;

import org.eclipse.swt.SWT;
import org.eclipse.swt.layout.FormLayout;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.ExpandBar;
import org.eclipse.swt.widgets.Group;
import org.eclipse.swt.widgets.Shell;
import org.snoghertframework.swt.util.impl.LayoutUtil;
import org.springframework.beans.factory.annotation.Autowired;

import br.com.snoghert.persistence.event.RepositoryModifiedEvent;
import br.com.snoghert.persistence.event.RepositoryModifiedListener;
import br.com.statizo.financeiro.event.PeriodoChangeListener;
import br.com.statizo.financeiro.event.PeriodoEvent;
import br.com.statizo.financeiro.repository.RepositorioLancamento;


public class ControleComposite extends Composite{

	protected ExpandBar bar;

	private Group groupArea;
	
	@Autowired
	private Shell shell;
	

	private LayoutUtil layoutUtil  = new LayoutUtil();
	
	@Autowired
	protected RepositorioLancamento repositorioLancamento;

	public ControleComposite(Composite tabFolder, int style) {

		super(tabFolder, style);
		
		setLayout(new FormLayout());

		groupArea = new Group(this,SWT.NONE);
		groupArea.setText("Controle de Recursos Alocados");
		groupArea.setLayout(new FormLayout());

		layoutUtil.setFormData(groupArea, 5, 25, 97, 90);

		//updateData();
	
	}



//	public List<ControleCompositeData> getRecursosData(){
//		
//		
//		List<Lancamento> recursos = repositorioLancamento.getRecursos(calendarService.getRealSelectedMonth(),calendarService.getYear());
//		List<ControleCompositeData> recursoDataList = new ArrayList<>(recursos.size());
//		List<ControleCompositeItemData> itemDataList = null;
//		
//		for(int i = 0; i<recursos.size(); i++){
//
//			Lancamento recurso = recursos.get(i);
//			ControleCompositeData compositeData = new ControleCompositeData();
//			List<Lancamento> controles = repositorioLancamento.getControles(recurso);
//			itemDataList = new ArrayList<>(controles.size());
//			
//			double total = recurso.getValor();
//			double gasto = 0.0d;
//			
//			for(int j = 0; j<controles.size(); j++){
//				
//				Lancamento controle = controles.get(i);
//				ControleCompositeItemData itemData = new ControleCompositeItemData();
//				itemData.dia = controle.getDataPagamento().get(Calendar.DATE);
//				itemData.valor = controle.getValor();
//				itemData.descricao = controle.getComplemento();
//				itemDataList.add(itemData);
//				itemDataList.add(j, itemData);
//				
//				gasto+=controle.getValor();
//				
//			}
//
//			double resto = total - gasto;
//			compositeData.itens = itemDataList;
//			double percent = (gasto / total) * 100;
//			compositeData.title = recurso.getTipo().getDescricao() + " - "+recurso.getDescricao()+" : "+formatterUtil.getFormattedMoney(resto) + " de " + formatterUtil.getFormattedMoney(total);
//			compositeData.title += " ( "+formatterUtil.getStringValue(percent)+"% gasto )";
//			compositeData.type = ControleCompositeData.OK;
//			
//			if(gasto / total > 0.7d)
//				compositeData.type = ControleCompositeData.WARN;
//			if(total - gasto == 0.0)
//				compositeData.type = ControleCompositeData.ERROR;
//
//			
//			recursoDataList.add(compositeData);
//		}
//
//		
//		return recursoDataList;
//	}

	public void updateData(){

//		List<ControleCompositeData> recursosData = getRecursosData(); 
//
//		int recSize = recursosData.size();
//
//		GridData gridData = null;
//
//
//		if(bar!=null)
//			bar.dispose();
//		bar = new ExpandBar (groupArea, SWT.V_SCROLL);
//		
//		FormData formData = new FormData();
//		formData.left = new FormAttachment(1);
//		formData.right = new FormAttachment(99);
//		formData.top = new FormAttachment(3);
//		formData.bottom = new FormAttachment(99);
//		bar.setLayoutData(formData);
//
//		gridData = new GridData();
//		for(int i = 0; i<recSize; i++){
//
//			Composite composite = new Composite(bar, SWT.NONE);
//			ExpandItem expandItem = new ExpandItem(bar, SWT.V_SCROLL, i);
//			expandItem.setControl(composite);
//
//
//			//Data
//			ControleCompositeData info = recursosData.get(i); //Recurso
//			expandItem.setText(info.title);
//
//			if(info.type == ControleCompositeData.ERROR){
//				expandItem.setImage(Display.getDefault().getSystemImage(SWT.ICON_ERROR));
//			}else if(info.type == ControleCompositeData.WARN){
//				expandItem.setImage(Display.getDefault().getSystemImage(SWT.ICON_WARNING));				
//			}else{
//				expandItem.setImage(Display.getDefault().getSystemImage(SWT.ICON_INFORMATION));
//			}
//
//
//			GridLayout gridLayout = new GridLayout();
//			gridLayout.numColumns = 2;
//			gridLayout.makeColumnsEqualWidth = true;
//			composite.setLayout(gridLayout);
//
//			gridData = new GridData();
//			gridData.grabExcessHorizontalSpace = false;
//			gridData.horizontalAlignment = GridData.FILL;
//			gridData.horizontalSpan = 4;
//			gridData.widthHint = 300;
//			composite.setLayoutData(gridData);
//
//
//			gridData = new GridData();
//			gridData.grabExcessHorizontalSpace = true;
//			gridData.horizontalAlignment = GridData.FILL;
//			gridData.horizontalSpan = 2;
//
//			Table table = new Table(composite, SWT.BORDER | SWT.SINGLE | SWT.V_SCROLL | SWT.H_SCROLL);
//			table.setHeaderVisible(true);
//			table.setLinesVisible(true);
//
//			table.setLayoutData(gridData);
//
//			TableColumn column = new TableColumn(table, SWT.NONE);
//			column.setText("Dia");
//			column.setResizable(true);
//			column.pack();
//
//			column = new TableColumn(table, SWT.NONE);
//			column.setText("Valor");
//			column.setResizable(true);
//			column.pack();
//
//			column = new TableColumn(table, SWT.NONE);
//			column.setText("Descrição");
//			column.setResizable(true);
//			column.pack();
//
//
//			List<ControleCompositeItemData> itens = info.itens;
//			int contrSize = itens.size();
//
//			for(int j = 1; j<contrSize; j++){
//
//				TableItem item = new TableItem(table, SWT.NONE);
//				item.setText(new String[]{itens.get(j).dia+"",formatterUtil.getFormattedMoney(itens.get(j).valor),itens.get(j).descricao});
//				table.getColumn(0).pack();
//				table.getColumn(1).pack();
//				table.getColumn(2).pack();
//			}
//
//			table.pack();
//			expandItem.setHeight(table.getBounds().height + 5);
//		}
//		
//		this.redraw();
//		this.update();
//		this.layout(true,true);
		
		
		
	}




	class ControleCompositeData{

		public String title;
		public double valorTotal;
		public double percent;

		
		public int type;

		public static final int OK = 0;
		public static final int ERROR = -1;
		public static final int WARN = 1;

		public List<ControleCompositeItemData> itens;


	}


	class ControleCompositeItemData{

		public int dia;
		public double valor;
		public String  descricao;
		
	}



}